package com.crm.system.service.customerManager;

import com.crm.common.exception.FastDFSException;
import com.crm.common.model.DhPageInfo;
import com.crm.model.entity.cluePoolManager.ClueVisitRecord;
import com.crm.model.entity.contactManager.Contact;
import com.crm.model.entity.contractManager.CustomerContract;
import com.crm.model.entity.customerManager.*;
import com.crm.model.entity.finishOrderProduct.FinishOrderProduct;
import com.crm.model.entity.orderManager.CustomerProductOrder;
import com.crm.model.qo.customerManager.*;
import com.crm.model.vo.cluePoolManager.ClueFollowVO;
import com.crm.model.vo.contactManager.IndustryAreaVO;
import com.crm.model.vo.customerContractManager.CustomerContractVO;
import com.crm.model.vo.customerContractManager.exchangeVO;
import com.crm.model.vo.customerManager.*;
import com.crm.model.vo.datasearch.DataSearchResultVO;
import com.crm.model.vo.finishOrderProduct.FinishOrderProductVO;
import com.crm.model.vo.opportunityManager.OpportunityCustomerVO;
import com.crm.model.vo.returnMoney.CustFinanceProductOderVO;
import com.crm.model.vo.returnMoney.ProductOfCustomerVO;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @ Author ：pym
 * @ Date   ：2021/1/18 15:54
 */
public interface CustomerService {
    /**
     * 管理模块 -- 客户列表
     * @param pageIndex
     * @param pageSize
     * @param customerQO
     * @param sortName
     * @param sortOrder
     * @return
     */
    DhPageInfo<CustomerVO> selectCustomerVOList(Integer pageIndex, Integer pageSize, CustomerQO customerQO, String sortName, String sortOrder);

    /**
     * 根据客户池ID查询客户池下所有客户ID
     * @param customerPoolId
     * @return
     */
    List<String> selectCustomerIdList(String customerPoolId);

    /**
     * 客户详情
     * @param customerPoolId 客户池id
     * @return
     */
    Customer selectCustomerByClueId(String customerPoolId);

    /**
     * 根据客户Ids删除客户
     * @param customerIds
     * @param deleteStatus
     * @return
     */
    Boolean batchDeleteCustomerByCustomerIds(List<String> customerIds, short deleteStatus);

    /**
     * 根据客户Id删除客户
     * @param customerId
     * @return
     */
    Boolean deleteCustomerById(String customerId);

    /**
     * 根据客户id查询需求分析
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param sortName 排序列名字
     * @param sortOrder 排序规则(asc/desc)
     * @param customerId 客户id
     * @return
     */
    DhPageInfo<DemandAnalysis> demandAnalysisList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String customerId);

    /**
     * 客户详情-新增需求分析
     * @param demandAnalysis 需求分析实体
     * @return
     */
    Boolean addDemandAnalysis(DemandAnalysis demandAnalysis);

    /**
     * 客户--收回
     * @param customerId
     * @param returnReason
     * @return
     */
    String retrieveCustomer(String customerId, String returnReason);

    /**
     * 用户模块 -- 我的企业客户
     * @param pageIndex
     * @param pageSize
     * @param customerQO
     * @param sortName
     * @param sortOrder
     * @return
     */
    DhPageInfo<CustomerVO> selectMyCustomerList(Integer pageIndex, Integer pageSize,
                                                CustomerQO customerQO, String sortName, String sortOrder);


    /**
     * 根据客户名称查询重复客户
     * @param customerName
     * @return
     */
    List<CustomerRepeatVO> findRepeatByCustomerName(String customerName);

    /**
     * 修改公司简介
     * @param customerCompanyInfo 公司简介实体类
     * @return
     */
    Boolean updateCustomerCompanyInfo(CustomerCompanyInfo customerCompanyInfo);

    /**
     * 客户详情-新增联系人-名字重复问题
     * @param customerId 客户id
     * @param contactName 联系人姓名
     * @param contactInformation 联系方式
     * @return
     */
    CustomerContactPerson getCustomerIdAndContactName(String customerId, String contactName,String contactInformation);

    /**
     * 竞品记录列表
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param sortName 排序列名字
     * @param sortOrder 排序规则(asc/desc)
     * @param customerId 客户id
     * @return
     */
    DhPageInfo<Competitor> competitorList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder,String customerId);

    /**
     * 新增竞品
     * @param competitor 竞品实体类
     * @return
     */
    Boolean addCompetitor(Competitor competitor);

    /**
     * 联系人模块 --通过登录人查询客户列表
     * @return
     */
    List<Customer> getCustomerList();

    /***
     * @Description:获取会员客户列表
     * @Param:
     * @Author: luojie
     * @Date: 2021/8/11 15:29
     */
    List<Customer> getMemberCustomerList();

    /***
     * @Description:查询非会员合同客户列表
     * @Author: luojie
     * @Date: 2021/4/23 15:04
     */
    List<HashMap> getNonMemberContractCustomerList();

    /**
     * 客户退回记录列表
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param sortName 排序列名字
     * @param sortOrder 排序规则(asc/desc)
     * @param customerId 客户id
     * @return
     */
    DhPageInfo<CustomerReturnVO> customerReturnList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String customerId);

    /**
     * 客户领取记录列表
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param sortName 排序列名字
     * @param sortOrder 排序规则(asc/desc)
     * @param customerId 客户id
     * @return
     */
    DhPageInfo<CustomerReceiveVO> customerReceiveList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String customerId);

    /**
     * 客户详情商机管理
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param sortName 排序列名字
     * @param sortOrder 排序规则(asc/desc)
     * @param customerId 客户id
     * @return
     */
    DhPageInfo<OpportunityCustomerVO> opportunityByCustomerIdList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String customerId);

    /**
     * 客户公海-客户清单-领取
     * @param customerId 客户id
     * @param customerPoolId 客户池id
     * @param nature 性质：1-全国公有池；2-分公司公有池；
     * @param affiliatedCompanyId 全国公有池关联公司id
     * @return
     */
    String receiveCustomer(String customerId, String customerPoolId, String nature, String affiliatedCompanyId);

    /**
     * 客户调转-客户流转记录
     * @param pageIndex
     * @param pageSize
     * @param customerName 客户名称
     */
    DhPageInfo<CustomerTransferRecordVo> customerTransferRecordList(Integer pageIndex,Integer pageSize,String customerName);

    /**
     * 新增客户
     * @param customerAddQO
     * @return
     */
    Map<String,String> addCustomer(CustomerAddQO customerAddQO);

    /**
     * 根据客户Id修改客户状态
     * @param customerId
     * @return
     */
    Boolean updateCustomerState(String customerId, String customerState);

    /**
     * 用户-线索管理-我的线索池-线索清单-转化为客户
     * @param clueId 线索id
     * @return
     */
    String convertToCustomer(String clueId);

    /**
     * 客户详情跟进记录
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param sortName 排序列名字
     * @param sortOrder 排序规则(asc/desc)
     * @param customerId 客户id
     * @return
     */
    DhPageInfo<ClueFollowVO> clueFollowList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String customerId);

    /**
     * 客户详情拜访记录
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param sortName 排序列名字
     * @param sortOrder 排序规则(asc/desc)
     * @param customerId 客户id
     * @return
     */
    DhPageInfo<ClueVisitRecord> visitRecordList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String customerId);

    /**
     * 客户--分配
     * @param distributeUserId   ---被分配人员ID
     * @param customerId         ---客户ID
     * @param customerPoolId     ---客户池ID
     * @return
     */
    Map<String,Object> distributeCustomer(String distributeUserId, String customerId, String customerPoolId);

    /**
     * 客户--释放
     * @param customerId
     * @param releaseReason
     * @return
     */
    Boolean releaseCustomer(String customerId, String releaseReason);

    List<Customer> getCustomerListByComp();

    /**
     * 客户详情合同信息
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param sortName 排序列名字
     * @param sortOrder 排序规则(asc/desc)
     * @param customerId 客户id
     * @return
     */
    DhPageInfo<CustomerContractVO> contractList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String customerId);

    /**
     * 客户详情订单信息
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param sortName 排序列名字
     * @param sortOrder 排序规则(asc/desc)
     * @param customerId 客户id
     * @return
     */
    DhPageInfo<CustomerProductOrder> orderList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String customerId);

    /**
     * 客户详情产品明细
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param sortName 排序列名字
     * @param sortOrder 排序规则(asc/desc)
     * @param customerId 客户id
     * @param productCategories 产品分类 0:非会员;1:会员
     * @return
     */
    DhPageInfo<CustFinanceProductOderVO> finishOrderProductList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String customerId, String productCategories);

    /**
     * 客户详情产品明细
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param sortName 排序列名字
     * @param sortOrder 排序规则(asc/desc)
     * @param customerId 客户id
     * @return
     */
    DhPageInfo<CustFinanceProductOderVO> csdFinishOrderProductList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String customerId);

    /**
     * 分页展示移交资料页面的客户信息
     * @Author renshaorong
     * @Date 2021/4/9
     * @param pageIndex 页码
     * @param pageSize 页面大小
     * @param moveCustomerQO 筛选条件
     * @param sortName 排序名称
     * @param sortOrder 排序方式 desc/asc
     * @return
     */
    DhPageInfo<CustomerVO> getCustomerListByUserAccountId(Integer pageIndex, Integer pageSize, MoveCustomerQO moveCustomerQO, String sortName, String sortOrder);

    /**
     * 批量移动客户给指定用户
     * @Author renshaorong
     * @Date 2021/4/9
     * @param customerList 被选中客户List
     * @return
     */
    String moveSelectedCustomers(List<Customer> customerList);

    /**
     * 客户分析
     * @param qo
     * @return
     */
    AnalyseCustomerVO analyseCustomer(AnalyseCustomerQO qo);

    /**
     * 客户分析
     * @param
     * @return
     */
    AnalyseCustomerVO analyseCustomerByPeriod(String startDate ,String endDate,boolean isSuperAdmin);


    /**
     * 获取一个客户
     * @return
     */
    CustomerVO selectOneCustomer();

    /**
     * 客户意向分析
     * @param dateType
     */
    AnalyseCustomerRedisVO getAnalyseCustomerIntention(String dateType);

    /**
     * 首页快速查重(根据客户名称/手机号查重)
     * @author yuanyunfeng
     * @date 2021/4/19 14:38
     * @param type 类型：1-按客户名称查重；2-按手机号查重
     * @param isVip 是否会员
     * @param checkContent
     * @return
     */
    List<CustomerFQRepeatVO> fastQueryRepeat(String type, String isVip, String checkContent);

    /**
     * 新增个人客户
     * @Author pym
     * @Date  2021/4/19 16:52
     * @param customerAddQO -客户参数
     * @param file -上传文件
     * @return {@link {java.lang.String}}
     */
    String addIndividualCustomer(CustomerAddQO customerAddQO, MultipartFile file) throws FastDFSException;

    /**
     * 恢复被释放的客户
     * @param userId
     * @param customerId
     * @return
     */
    boolean recoverCustomer(String userId, String customerId,String customerReturnId);

    /**
     * 客户公海-客户调转-领取
     * @param customerId 客户id
     * @return
     */
    String receiveCustomerAround(String customerId);

    /**
     * 会员客户分析
     * @return
     */
    VipCustomerAnalyseVO vipCustomerAnalyse(Integer type);

    /**
     * 会员客户数量统计
     * @return
     */
    VipCustomerAnalyseVO getVipCustomerCount();

    /**
     * 会员客户列表
     * @param pageIndex
     * @param pageSize
     * @param membershipLevel
     * @param sortName
     * @param sortOrder
     * @return
     */
    DhPageInfo<VipCustomerListVO> selectVipCustomerList(Integer pageIndex, Integer pageSize, Integer membershipLevel, String sortName, String sortOrder);

    /**
     * 联系人列表跳转客户详情-查询是不是自己的客户
     * @param customerId 客户id
     * @return
     */
    boolean selectCustomerSelf(String customerId);

    /**
     * 新增商机-客户名称精准匹配
     * @param customerName 客户名称
     * @return
     */
    boolean selectCustomerNameReg(String customerName);

    /**
     * 客户详情-修改客户评分
     * @param customerId 客户id
     * @param customerRating 客户评分
     * @return
     */
    Boolean updateCustomerRating(String customerId,String customerRating);

    /**
     * 客户管理 - 单品客户 - 新增单品客户列表
     * @Author pym
     * @Date  2021/4/30 10:51
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param customerName 客户名称
     * @param sortName 排序列名字
     * @param sortOrder 排序规则(asc/desc)
     * @return {@link {com.crm.common.model.DhPageInfo<com.crm.model.vo.customerManager.CustomerVO>}}
     */
    DhPageInfo<CustomerVO> selectSingleProductCustomerList(Integer pageIndex, Integer pageSize, String customerName, String sortName, String sortOrder);

    /**
     * 根据客户Id查询客户信息
     * @param customerId
     * @return
     */
    Customer selectCustomerById(String customerId);

    /**
     * qo精确查询客户
     * @param pageIndex
     * @param pageSize
     * @param customerQO
     * @param sortName
     * @param sortOrder
     * @return
     */
    DhPageInfo<CustomerVO> selectCustomerPreciseSearch(Integer pageIndex, Integer pageSize, CustomerQO customerQO, String sortName, String sortOrder);

    /**
     * 修改客户编码
     * @param customerId
     */
    void updateCustomerNumber(String customerId);

    /**
     * 生成客户编号
     * @return
     */
    String createCustomerNumber();

    /**
     * 根据客户名称检索数据
     * @param customerName 客户名称
     * @return
     */
    List<DataSearchResultVO> selectDataByCustomerName(String customerName);

    /**
     * 客户管理-客户详情-会员产品-详细信息
     * @param customerId 客户Id
     * @param memberProductId 会员产品id
     * @param finishOrderProductNum 产品号
     * @param orderId 订单id
     * @param memberProductCode 产品编码
     * @param bs 0会员 1非会员
     * @return
     */
    CustomerProductDetailMemberCardVO selectCustomerProductDetail(String customerId, String memberProductId, String finishOrderProductNum,String orderId,String memberProductCode,String bs);

    /**
     * 客户管理-客户详情-会员产品-课程-产品信息
     * @param customerId 客户Id
     * @param courseNum 课程标号
     * @return
     */
    List<CustomerProductVO> selectCustomerProduct(String customerId, String courseNum);

    /**
     * 我的客户-查询客户里面有的行业
     * @param bs 0管理端 1用户端
     * @param type industry行业 province地区
     * @return
     */
    List<IndustryAreaVO> selectIndustry(String bs, String type);

    /**
     * 我的客户-查询客户里面的热门标签
     * @param bs 0管理端 1用户端
     * @return
     */
    List<TagVO> selectTag(String bs);

    /**
     * 客户-客户订单完成的会员产品会员卡
     * @param customerProductDetailMemberCard 客户订单完成的会员产品会员卡实体
     * @return
     */
    String addCustomerProductDetailMemberCard(CustomerProductDetailMemberCard customerProductDetailMemberCard);

    /**
     * 通过会员卡id查询会员卡信息
     * @param customerProductDetailMemberCardId 会员卡id
     * @return
     */
    CustomerProductDetailMemberCard getCustomerProductDetailMemberCardById(String customerProductDetailMemberCardId);



   /**
     * @Description: 根据产品编码查询客户信息
     * @Param: [productCode]
     * @Return: java.util.List<com.crm.model.vo.customerManager.FinishOrderCustomerVO>
     * @Author: lixq-fs
     * @Date: 2021/6/2
    **/
    List<FinishOrderCustomerVO> selectCustomersByProductCode(String productCode);




    /**
     * @Description: 根据客户id获取客户下产品信息
     * @Param: [customerId]
     * @Return: java.util.List<com.crm.model.vo.returnMoney.ProductOfCustomerVO>
     * @Author: lixq-f
     * @Date: 2021/6/3
    **/
    List<ProductOfCustomerVO> selectProductsByCustomerId(String customerId,String productCode);

    /**
     * 查询客户里面的跟进标签
     * @param bs
     * @return
     */
    List<TagVO> selectFollowTag(String bs);

    /**
     * 联系人-新增个人联系人--查询同一用户下的联系方式不能一样
     * @param contactName         客户名称
     * @param contactInformation 联系方式
     * @param contactNature      联系人性质  0企业联系人  1非企业联系人
     * @return
     */
    Customer getCustomerNameAndPhone(String contactName, String contactInformation, String contactNature);

    /**
     * 更新客户信息
     * @Author renshaorong
     * @Date 2021/7/12
     * @param customer
     * @return
     */
    String updateCustomer(Customer customer);

    /**
     * 信息错误分页
     * @param pageIndex
     * @param pageSize
     * @param customerQO
     * @param sortName
     * @param sortOrder
     * @Author renshaorong
     * @Date 2021/7/12
     * @return
     */
    DhPageInfo<CustomerVO> selectInfomationErrorList(Integer pageIndex, Integer pageSize, CustomerQO customerQO, String sortName, String sortOrder);

    /**
     *通过登录人查询企业客户
     * @Author renshaorong
     * @Date 2021/7/13
     */
    List<Customer> getCompCustomerList(String order);

    /**
     * 获取用户所在公海，是全国池还是分公司池
     * @param customerId
     * @return
     */
    Map<String,Object> getPoolType(String customerId);

    /**
     * 往Redis里批量添加客户信息
     * @Author pym
     * @Date  2021/7/21 13:29
     * @param
     * @return {@link }
     */
    void insertCustomerToRedis();

    /**
     * 客服管理-客户详情-会员卡信息
     * @param customerId 客户id
     * @return
     */
    DhPageInfo<CustomerProductDetailMemberCard> selectCardByCustomerId(String customerId,String cardNumber,Integer pageIndex,Integer pageSize,String sortName,String sortOrder);

    /**
     * 俺的客户列表
     * @param pageIndex
     * @param pageSize
     * @param customerQO
     * @param sortName
     * @param sortOrder
     * @return
     */
    DhPageInfo<CustomerVO> meCustomerList(Integer pageIndex, Integer pageSize, CustomerQO customerQO, String sortName, String sortOrder);


    /**
     * 内训部-客户公海
     * @Author renshaorong
     * @Date 2021/9/6
     * @param pageIndex
     * @param pageSize
     * @param customerQO
     * @param sortName
     * @param sortOrder
     * @return
     */
    DhPageInfo<CustomerVO> selectCustomerVOListForInT(Integer pageIndex, Integer pageSize, CustomerQO customerQO, String sortName, String sortOrder);

    DhPageInfo<CustomerVO> selectCustomerVOListByOwner(Integer pageIndex, Integer pageSize, CustomerQO customerQO, String sortName, String sortOrder);

    /**
     * 内训部-新增客户
     * @param customerAddQO
     * @return
     */
    @Transactional(rollbackFor = {RuntimeException.class, Error.class})
    Map<String, String> addCustomerinT(CustomerAddQO customerAddQO);

    DhPageInfo<FinishOrderProductVO> selectFinishOrderProductList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String customerId);

    /**
     * 获取内训下的客户
     * @return
     */
    List<CustomerVO> getCustomerUserList();

    /**
     * changeProductXcchHychGdb
     * @Author wangpeng
     * @Date 2021/10/21
     * @param vo	
     * @return
     */
    Map changeProductXcchHychGdb(exchangeVO vo);

    /**
     * 客户详情会员卡
     *
     * @param pageIndex 页码
     * @param pageSize  分页大小
     * @param sortName  排序列名字
     * @param sortOrder 排序规则(asc/desc)
     * @return
     */
    DhPageInfo<CardVO> selectCardByCustomerIdList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String customerId);

    /**
     * 查询客户下的产品
     * @param customerId   客户Id
     * @return
     */
    List<CustFinanceProductOderVO> selectProductByCustomerId(String customerId);

    /**
     * 查询客户下的其他联系人
     * @param customerId   客户Id
     * @return
     */
    List<Contact> selectOtherContactByCustomerId(String customerId, String contactId);

    /**
     * @author chengyun
     * @date 2021年11月18日 下午 16:39:49
     * info 根据合同类型统计上月各分公司会员合同数量 未删除 生效中
     * @param contractTypeArr 合同类型
     */
    String statisticalVipContractCount(char[] contractTypeArr);

    /**
     * 客户详情税法直通车
     *
     * @param pageIndex 页码
     * @param pageSize  分页大小
     * @param sortName  排序列名字
     * @param sortOrder 排序规则(asc/desc)
     * @return
     */
    DhPageInfo<TaxCardVO> selectTaxCardByCustomerIdList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String customerId);

    /**
     * 更新客户会员开始时间和结束时间
     */
    void updateCustomerMemberDate();

    /**
     * 修改合同状态  改为已结束
     */
    void updateContractStatus();

    /**
     * 用户端 - 客户公海 - 分公司 筛选列表
     * @Author pym
     * @Date  2021/11/23 11:25
     * @param pageIndex -页码
     * @param pageSize -分页大小
     * @return {@link {com.crm.common.model.DhPageInfo<com.crm.model.vo.customerManager.CustomerPoolNameVO>}}
     */
    DhPageInfo<CustomerPoolNameVO> selectCustomerPoolNameList(Integer pageIndex, Integer pageSize);

    /**
     * 用户端 - 客户公海 - 地区 筛选列表
     * @Author pym
     * @Date  2021/11/23 11:40
     * @param pageIndex -页码
     * @param pageSize -分页大小
     * @param customerPoolId -客户池Id
     * @return {@link {com.crm.common.model.DhPageInfo<java.lang.String>}}
     */
    DhPageInfo<String> selectProvinceNameList(Integer pageIndex, Integer pageSize, String customerPoolId);

    /**
     * 用户端 - 客户公海 - 标签 筛选列表
     * @Author pym
     * @Date  2021/11/23 14:21
     * @param pageIndex -页码
     * @param pageSize -分页大小
     * @param customerPoolId -客户池Id
     * @return {@link {com.crm.common.model.DhPageInfo<java.lang.String>}}
     */
    DhPageInfo<String> selectTagList(Integer pageIndex, Integer pageSize, String customerPoolId);

    /**
     * 用户端 - 客户公海 - 客户池下客户列表
     * @Author pym
     * @Date  2021/11/23 15:41
     * @param pageIndex -页码
     * @param pageSize -分页大小
     * @param poolCustomerQO -筛选条件
     * @param sortName -排序列名字
     * @param sortOrder -排序规则(asc/desc)
     * @return {@link {com.crm.common.model.DhPageInfo<com.crm.model.vo.customerManager.PoolCustomerVO>}}
     */
    DhPageInfo<PoolCustomerVO> selectPoolCustomerList(Integer pageIndex, Integer pageSize, PoolCustomerQO poolCustomerQO, String sortName, String sortOrder);

    /**
     * 用户端 - 客户公海 - 行业 筛选列表
     * @Author pym
     * @Date  2021/12/10 10:59
     * @param pageIndex -页码
     * @param pageSize -分页大小
     * @param customerPoolId -客户池Id
     * @return {@link {com.crm.common.model.DhPageInfo<java.lang.String>}}
     */
    DhPageInfo<String> selectIndustryList(Integer pageIndex, Integer pageSize, String customerPoolId);

    /**
     * 客户管理-客户详情-会员产品-会员卡
     * @param finishOrderProductNum 产品号
     * @param orderId               订单id
     * @return
     */
    DhPageInfo<CustomerProductDetailMemberCard> selectCardList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String orderId, String finishOrderProductNum);

    /**
     * 客户管理-客户详情-会员产品-税法直通车
     *
     * @param finishOrderProductNum 产品号
     * @param orderId               订单id
     * @return
     */
    DhPageInfo<CustomerProductDetailThroughTrainTax> selectTrainTaxList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String orderId, String finishOrderProductNum);

    /**
     * 客户管理-客户详情-会员产品-兑换码
     * @param finishOrderProductNum 产品号
     * @param orderId               订单id
     * @return
     */
    DhPageInfo<CustomerProductDetailExchangeCode> selectExchangeCodeList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String orderId, String finishOrderProductNum);

    /**
     * 客户管理-客户详情-会员产品-云顾问卡
     * @param finishOrderProductNum 产品号
     * @param orderId               订单id
     * @return
     */
    DhPageInfo<CustomerProductDetailYun> selectYunList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String orderId, String finishOrderProductNum);

    /**
     * 客户管理-客户详情-会员产品-充值卡
     * @param finishOrderProductNum 产品号
     * @param orderId               订单id
     * @return
     */
    DhPageInfo<CustomerProductDetailRechargeCode> selectRechargeCodeList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String orderId, String finishOrderProductNum);

    /**
     * 客户管理-客户详情-会员产品-优惠劵
     * @param finishOrderProductNum 产品号
     * @param orderId               订单id
     * @return
     */
    DhPageInfo<CustomerProductDetailCoupon> selectCouponList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String orderId, String finishOrderProductNum);

    /**
     * 每周执行一次(客户会员到期时间设置为流失客户)
     */
    Boolean updateLoseCustomer();

    /**
     * 每周执行一次(会员最大合同到期时间设置为客户会员到期时间)
     * @return
     */
    Boolean updateCustomerMembershipExpirationTm();

    void updatePotentialCustomer(String customerId);

    void updatePotentialCustomerOne(String customerId);

    /**
     * ES同步客户信息
     * @param customer
     */
    void syncESCustomerMembershipLevel(Customer customer);
}
